![OU指定でStackSetsを適用している際に、Stackを削除せずにAWSアカウントを別OUに移動する方法](https://devio2023-media.developers.io/wp-content/uploads/2022/08/aws-cloudformation.png)
OU指定でStackSetsを適用している際に、Stackを削除せずにAWSアカウントを別OUに移動する方法
「StackSetsで展開したStackに影響を与えずにOU移動させる」
OU指定で展開しているStackSetsを適用されているアカウントを別のOUに移動してみました。
やりたいこと
OU指定でStackSetsを展開しています。 特定アカウントを別のOUに移動させたいです。
前提
StackSetsの設定は「自動デプロイ:有効」かつ「アカウント削除の動作:削除」とします。
この設定の場合、指定していないOUに移動すると、Stackは削除されてしまいます。
しかし、OU移動で展開したStackを削除したり、StackSetsの再登録はしたくありません。
結論
移動前にStackSetsに移動先のOU IDを追加、(必要であれば)移動後に移動元のOU IDを削除
手順は以下です。
やってみた
実際にStackを削除せずに、AWSアカウントを別OUに移動します。
- StackSetにStackを追加して、新しいOU IDを追加する
- 新しいOUにアカウントを移動する
- StackSetsからStackを削除して、古いOU IDを削除する
- 移動元OU: hoge
- 移動先OU: fuga
- 移動するアカウント名: stacksets-test
移動元OUには、StackSetsが適用されている状態です。
移動するアカウントのCloudFormationは、以下のようにStackSetsで適用されたStackがあります。
Stack Setsのデプロイ設定は、以下です。
パラメータ | 設定値 |
---|---|
自動デプロイ | 有効化 |
アカウント削除時にスタックを保持 | スタックを削除 |
1. StackSetにStackを追加して、新しいOU IDを追加する
以下のコマンドでStackSetsの適用対象になっているOU IDを確認します。(GUIで確認できなさそうだっため、CLIで)
$ aws cloudformation describe-stack-set --stack-set-name stacksets-test --query StackSet.OrganizationalUnitIds [ "ou-1111-XXXXXX" # hoge OUのOU ID ]
移動先OU fugaのOU IDを登録します。
Stack Setsを選択して、「StackSetにスタックを追加」します。
fuga OUのOU IDを登録して、設定を完了します。
再度コマンドで対象のOU IDを確認すると、fuga OUのOU IDが追加されています。
aws cloudformation describe-stack-set --stack-set-name <StackSet名> --query StackSet.OrganizationalUnitIds [ "ou-1111-XXXXXX", # hoge OUのOU ID "ou-1111-YYYYYY" # 追加 fuga OUのOU ID ]
2. 新しいOUにアカウントを移動する
実際にアカウントを移動させてみましょう。
対象アカウントのCloudFormationを見てみます。 変更はなく想定通りの動作です。
3. StackSetsからStackを削除して、古いOU IDを削除する
古いOU ID(hoge)を削除します。
コマンドを実行して、OU hogeのOU IDが消えていることを確認します。
aws cloudformation describe-stack-set --stack-set-name <StackSet名> --query StackSet.OrganizationalUnitIds [ "ou-1111-YYYYYY" # fuga OUのOU ID ]
おわりに
OU指定でStackSetsを適用している際に、Stackを削除せずにAWSアカウントを別OUに移動する方法でした。
「移動前にStackSetsに移動先のOU IDを追加、(必要であれば)移動後に移動元のOU IDを削除」の操作を行うことで、StackSetsの設定で「アカウント削除の動作:削除」の場合にも、Stackを削除せずに移動できます。
以上、AWS事業本部の佐藤(@chari7311)でした。